Рис. 3. Архитектура Java Card
Системная архитектура Java Card представлена на рис. 3, из которого видно, что виртуальная машина Java Card находится на более верхнем уровне по сравнению со встроенной операционной системой и функциями специализированных интегральных схем (integrated circuit, IC). Уровень JVM скрывает технологические решения производителя за общим языком и системным интерфейсом. Структура Java Card определяет набор классов прикладного программного интерфейса (API), предназначенного для разработки приложений Java Card, и набор системных служб для нормального функционирования этих приложений. Необходимость дополнительных библиотек, которые реализуют расширенные служебные функции, обеспечивающие безопасность и описывающие системную модель, определяется спецификой решаемых задач. Приложения Java Card называются апплетами. На одной карте может выполняться несколько различных апплетов. Каждый апплет однозначно определяется идентификатором приложения (application identifier, AID), который описывается в пятой части стандарта ISO 7816.
Следует помнить об основных ограничениях смарт-карт. Нельзя приравнивать их к персональным компьютерам. Объем памяти и вычислительная мощность смарт-карт крайне малы, а Java Card 2.0 - это не просто урезанная версия JDK, а весьма специализированный продукт.
На следующем этапе, который называется персонализацией, в карту заносится информация, позволяющая однозначно идентифицировать ее владельца. Персонализация может быть физической или электронной. Физическая персонализация заключается в выдавливании или выжигании лазером имени пользователя и номера карточки на ее пластиковом корпусе. Электронная означает загрузку данных о владельце в постоянную память карты. Этими данными могут быть имя пользователя, персональный код или личный идентификационный номер.
Процесс инициализации и персонализации может проводиться по-разному в зависимости от производителя и конкретной модели карты. Чаще всего для хранения этой информации используется постоянная память EEPROM.
Итак, Java Card готова к применению. Ее можно приобрести непосредственно у эмитента или у другого продавца. Карты, распространяемые независимыми продавцами, называются картами общего назначения процесс персонализации у них, как правило, отсутствует.
Теперь вы можете вставить карту в устройство считывания и заставить апплеты, записанные в постоянную память карты, выполнить команды APDU, или же можете загрузить в карту дополнительные апплеты.
Java Card действует до истечения срока службы или до тех пор, пока неисправимая ошибка не заблокирует ее работу.
Большая часть информации, хранимой в памяти карты, должна сохраняться там даже после отключения источника питания (то есть после удаления карты из считывающего устройства). Виртуальная машина Java Card создает объекты в постоянной памяти EEPROM. Время работы виртуальной машины Java Card как раз и является сроком службы карты. После отключения источника питания виртуальная машина переходит в режим бесконечного цикла.
Объекты создаются в постоянной памяти (например, в EEPROM). Они могут быть потеряны или удалены механизмом "сборки мусора", если на них не ссылаются другие постоянные объекты. Однако запись в EEPROM выполняется на три порядка медленнее по сравнению с записью в RAM.
Доступ к некоторым объектам осуществляется достаточно часто, и содержимое их полей не нужно сохранять в неизменном состоянии. Java Card поддерживает временные (temporary) объекты, хранящиеся в памяти RAM. Если объект объявлен временным, его содержимое не может размещаться в постоянной памяти.
Понятно, что ключевые слова, поддерживающие описанные типы данных, также исключены из языка. Разработчики виртуальных машин могут поддерживать 32-разрядные целые, а также собственные методы апплетов, предназначенных для усовершенствованных смарт-карт с большим объемом памяти. Такие апплеты устанавливаются на карту уже после того, как она выпущена эмитентом.
Платформа Java Card включает в себя четыре пакета (см. врезку). В соответствии с соглашениями об именах, принятыми в Java, пакеты javacardx являются расширением архитектуры Java Card. Их поддержка является необязательной.
Апплеты Java создают объекты, которые в состоянии манипулировать данными и сохранять их. Владельцем объекта является создавший его апплет. Хотя любой апплет может ссылаться на объект, он все же не способен вызывать методы объекта до тех пор, пока не станет владельцем объекта или пока объект не будет совместно использоваться в явном виде. Апплет может разделять свои объекты с каким-то другим апплетом или со всеми апплетами сразу.
Апплет в архитектуре Java Card является независимой единицей. Его запуск, выполнение и функциональные возможности не оказывают никакого воздействия на другие объекты, хранящиеся в памяти карты.
После загрузки апплета в постоянную память карты и установления его связей с Java Card Framework и другими библиотеками начинается последний этап настройки. Общедоступный статический метод установки реализуется классом апплета, он предназначен для создания экземпляра программы и его регистрации в среде JCRE. Поскольку объем памяти карты ограничен, хорошим решением является создание и инициализация объектов на время работы апплета.
Апплет, хранящийся в памяти карты, остается в неактивном состоянии до тех пор, пока он не будет явно запущен на выполнение. Терминал посылает среде JCRE команду "SELECT APDU". Среда JCRE приостанавливает выполнение активного апплета, вызывает метод завершения его работы и при необходимости очищает память. Затем JCRE помечает апплет, идентификатор AID которого совпадает с идентификатором, заданным в команде "SELECT APDU", и вызывает метод запуска этого апплета на выполнение. Метод запуска координирует проведение необходимых подготовительных операций. Среда JCRE переадресует команды APDU активному апплету до тех пор, пока не будет получена очередная команда "SELECT APDU".
Это базовый пакет карты. Он определяет классы Applet и PIN, служащие для построения основных блоков программ Java Card и команд APDU, операционной системы и утилит, обеспечивающих реализацию сервисных функций Java Card, таких как управление командами APDU и совместное использование объектов.
javacardx.framework
Этот пакет предлагает объектно-ориентированную архитектуру файловой системы, совместимой со стандартом ISO 7816-4. Он поддерживает элементарные файлы (elementary files, EF), выделенные файлы (dedicated files, DF), а также ориентированные на работу с файлами команды APDU, определенные в стандарте ISO 7816.
javacardx.crypto и javacardx.cryptoEnc
Эти два пакета реализуют криптографические возможности, поддерживаемые смарт-картами.